Mobile computing devices such as personal digital assistants, contemporary mobile telephones, and hand-held and pocket-sized computers are becoming important and popular user tools. In general, they have become small enough to be extremely convenient, while consuming less battery power, and at the same time have become capable of running more powerful applications.
During the process of manufacturing such devices, embedded operating system images are typically built into a monolithic image file and stored in non-volatile storage (e.g., NAND or NOR flash memory, a hard disk and so forth) of each device. As a result, updating such a device is necessary or desirable from time-to-time.
However, a monolithic operating system has a number of disadvantages, including that to install an update, a large amount of resources (e.g., temporary storage and bandwidth) are needed to replace the entire monolithic image. At the same time, installing some subset components of the operating system is a difficult task, because the existing package install state on the device is variable, and there may be any number of versioned packages queued for install. At present there is not a known intelligent image update server infrastructure that can query the installed image on a device to figure out what to install. Even if such a server infrastructure can be developed, however, there would be privacy concerns with sharing a device's install state information with a server. What is needed is an efficient way to handle device updates on the device side, that can deal with the many update versions and conflicts and dependencies between those versions.